package add_$11_IOStream;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class _7ReplaceScannerWithIOStream {
    
    public static void main(String[] args) {
        Input in = new Input();
        System.out.println(in.next());
    }
}
class Input{
    //用于键盘读取的缓冲流
    BufferedReader buf;
    //字符串解析器，用于分隔字符串。因为我们是用BufferedReader的readLine()方法一行一行读，所以要分割这一行字符串。java 默认的分隔符是空格("")、制表符(\t)、换行符(\n)、回车符(\r)。
    StringTokenizer tok;
    // 用标准输入流System.in读取键盘输入
    public Input() {
        buf = new BufferedReader(new InputStreamReader(System.in));
    }
    
    // 判断tok对象是否还有数据，因为我们是读取一行，例如如果是这样：“123 123 21 22”，空格会被当作分隔符，就会得到四个数据，每次我们只返回一个数据，因此，定义此方法
    public boolean hasNext() {
        //tok == null 表示tok为空对象，那么就创建一个，并且读取输入的一行作为要被解析的参数
        //!tok.hasMoreElements() 表示tok已经没有数据了，那就重新创建一个
        while (tok == null || !tok.hasMoreElements()) {
            try {
                tok = new StringTokenizer(buf.readLine());
            } catch (Exception e) {
                return false;
            }
        }
        return true;
    }
    
    // 每次返回一个数据，一个被分割的数据
    public String next() {
        if (hasNext())
            //tok.nextToken() 返回从当前位置到下一个分隔符的字符串。
            return tok.nextToken();
        return null;
    }
    
    // 返回一行数据，则不需要经过tok处理
    public String nextLine(){
        try {
            return buf.readLine();
        } catch (IOException e) {
            return null;
        }
    }
    
    // 返回int类型数据
    public int nextInt() {
        return Integer.parseInt(next());
    }
    
    // 返回long类型数据
    public long nextLong() {
        return Long.parseLong(next());
    }

    // 返回double类型数据
    public double nextDouble() {
        return Double.parseDouble(next());
    }

}
